Шаг 4 - Первый апплет
Загрузить проект
Первым делом источники:
По мере написания шагов этот список будет пополняться. Теперь приступим...
Введение
Апплет - это своеобразное приложение которое, обычно, распространяется сквозь интернет и исполняется в окне браузера под управлением виртуальной машины Java (JVM). Из-за этого в нем есть ряд особенностей и ограничений.
Во-первых, поскольку апплет размещается внутри веб-страницы, он не имеет своего собственного полноценного окна, а всего-лишь область которую ему предоставляет браузер.
Во-вторых существуют ограничения из-за требований безопастности к апплетам. Главное из них - апплет не может работать с локальными файлами в отличие от Java-приложений.
Немного теории
Для создания апплета его главный класс наследуется от класса Applet из библиотеки java.applet. Чем является этот предок? Вот его родословная:
Object > Component > Container > Panel > Applet
Обо всех по порядку:
- Object - корень всей иерархии классов Java, то есть любой объект в Java имеет его среди своих предков. Даже если вы свой класс не наследуете не от чего, он есть базовым по умолчанию и избавиться от него никак нельзя. Данный класс обеспечивает функции для работы с объектами.
- Component - базовый класс для элементов управления и окон. Содержит основные методы компонент, например метод paint.
- Container - базовый класс для компонент, которые могут содержать в себе другие компоненты.
- Panel - кроме возможностей базовых классов умеет размещать компоненты.
- Applet - класс, который кроме того, что может все что и Panel содержит необходимые методы для работы апплета: инициализация, запуск, уничтожение, управление браузером и др.
Создаем код
Открываем какое-нибудь средство написания кода (ну это у кого какое, я навязываться не хочу, можно IDE или блокнот, кстати, средство не из худших).
Я назвал файл MyFirstApplet.java. Если предпочитаете другое имя - не забудьте так назвать и класс апплета.
import java.applet.Applet;
import java.awt.Graphics;
public class FirstApplet extends Applet
{
public void init()
{
}
public void start()
{
}
public void stop()
{
}
public void destroy()
{
}
public void paint(Graphics Gr)
{
Gr.drawString("Hello world!", 135, 100);
}
public String getAppletInfo()
{
return "Our First Applet";
}
}
Разбираем код
В первых двух строках подключаем два класса из стандартных библиотек Java. Первый из них нам уже известен. Второй, как видно из названия имеет отношение к графике. Далее объявляем наш главный класс, унаследовав его от библиотечного Applet. Далее ряд методов которые здесь ничего не делают, но зато у меня есть повод рассказать о них:
- init - вызывается при загрузке апплета браузером и служит для инициализации апплета
- start - вызывается после метода init при активизации пользователем страницы с апплетом, служит для запуска апплета
- stop - противоположность метода start, вызывается при покидании пользователем страницы. Например, ваш апплет проигрывает видео - самое время его здесь остановить ибо кому оно нужно если все уже ушли? Ресурсы же забирает.
- destroy - вызывается при уничтожении апплета для того чтобы можно было прибраться за собой. Но освобождать память занятую нашими объектами или другими данными здесь и вообще в Java, конечно, не надо - сборщик мусора пусть потрудится, на то и язык высокого уровня. А вот если потоки открывались - тут их закрыть можно. Кстати перед этим методом вызовется вышеупомянутый stop.
Далее метод paint, который вызывается когда апплету требуется перерисоваться. Его параметр Graphics умеет рисовать, этим мы и воспользуемся:
Gr.drawString("Hello world!", 135, 100);
- выводим, где-то в центре апплета, любимую строку первых приложений на многих языках (координаты я на глаз подобрал - не критикуйте пожалуйста). Пока об этом все, но о методе paint и его параметре мы еще не раз поговорим.
И наконец - метод getAppletInfo. Он существует на тот случай, если извне (например из javascript) у апплета спросят кто он.
С этим справились, компилируем и получаем файл FirstApplet.class.
Запускаем апплет
Кто решит посмотреть на апплет в appletviewer из jdk - тот будет прав, но я предлагаю посмотреть на него в браузере. Кстати если у кого нет браузера поддерживающего Java то рекомендую Opera 5.12. Опять же я не хочу навязываться, но у Opera есть пара преимуществ: бесплатный, быстрый и главное использует JRE от Sun!. Создаем в блокноте страницу:
<HTML>
<HEAD>
<TITLE>First applet</TITLE>
</HEAD>
<BODY>
<APPLET
code=FirstApplet.class
height=200
width=320>
</APPLET>
</BODY>
</HTML>
Дадим файлу редкое имя index.htm и сохраним в тот же каталог что и наш файл FirstApplet.class. О создании веб страниц рассказывать не буду, если кто не знает, то вам сюда. Остановлюсь только на самом интересном для нас тэге <applet>. C его параметрами ALIGN, HEIGHT, WIDTH, HSPACE, VSPACE и NAME тоже все понятно, мы же читали соответствующие шаги. Обратим внимание только на специфические параметры апплета:
- code - имя файла содержащего байт-код апплета
- codebase - местоположение кода апплета (или архива с ним см. ниже). По умолчанию, как в нашем случае, считается, что апплет находится там где и файл страницы
- alt - здесь бы надо написать послание пользователям, браузер которых не поддерживает Java
- archive - если код апплета в архиве, зададим тут имя архива. Для чего это? Допустим, что ваш апплет состоит из нескольких классов которые, конечно, находятся в своих отдельный *.class - файлах. Браузер первым делом скачает файл главного класса апплета, запускает и тут оказывается что нужен еще файл какого-нибудь класса - он начинает его скачивать и т.д. пока не скачает все файлы с байт-кодом классов. Долгий это процесс. А вот если упаковать весь двоичный код апплета в один архив - скачается все за один подход да еще и размером поменьше, что тоже немаловажно при работе в сети. В качестве архиватора используют jar (рекомендовано Sun) или обычный Zip. И я так делать буду.
Не упомянул я только об операторе <param> с помощью которого в апплет передаются параметры, для него напишем отдельный шаг. Итак открываем браузером локально нашу страницу, критикуем результат, допиваем (n+1)-ую чашку кофе (или чего покрепче). Если не получилось загрузите проект и сравните.
Как было отмечено, мы открыли страницу апплета локально, но в дальнейшем так дело не пойдет когда будем тестировать ,например, апплет который скачивает себе данные с сервера и т.д. Установите себе Веб-сервер. Опять же не хочу на вас давить, но лучше если это будет Apache. Где его взять и как установить в шаге 2 из раздела HTML&WEB.
Дальше
В следующем шаге мы внедрим в апплет пару элементов управления.
Автор:
Vitaly.